When communicating organized data, such as objects or data structures, within or between computer systems, the computer systems can use serialization techniques. Serialization involves translating organized data stored in memory, such as data structures, objects, etc. into a format that can be stored and later re-read by a computer system. For example, the organized data can be stored in a format conducive to storage in a file or memory buffer and/or conducive to transmission between the computer systems. The stored version of organized data can be re-read later to reconstruct a copy of the original in-memory version of the organized data. In some cases, a serialization technique is also called a marshalling technique. Deserialization is the reverse technique of generating organized data from a series of bytes. In some cases, deserialization is also called unmarshalling.
Some systems use the same format for data in memory and for stored data without using a specific serialization format. Not using a specific serialization format has some limitations:                An in-memory object can include data field(s) storing memory addresses to represent data by reference; e.g., pointers and/or data stored in separate blocks of memory. Typically, such memory addresses change each time an application is executed. Then, if memory addresses are written directly from an in-memory object to a stored object, those memory addresses are likely to be invalid when retrieved from the stored object.        Changing data definitions can be difficult, since a stored object using a first data format may not be readable using a changed (second) data format. For example, suppose data D1 is written using the first data format to a disk and then a field is added to the first data format to generate the changed data format. Then, when D1 is read from disk, D1 is missing a field present in the changed data format, which may cause the read of D1 to fail. Similar problems arise when fields are added and/or modified.        Using the same in-memory and storage formats does not account for architectural differences between computer systems, such as alignment, endianness, etc.        
Many serialization solutions have been created with web development in mind, and focus on sending relatively small messages. For games, these systems can be prohibitively expensive, as the amount of data per item is higher, yet available memory is more limited.
Many serialization “wire” or communication-oriented formats differ from in-memory formats; e.g., to overcome some/all of the limitations mentioned above. As wire and in-memory formats differ, the data has to be converted between formats during communication For example, in-memory data on computer system A that is to be communicated to computer system B using a wire format can involve: serializing the in-memory data in the wire format on system A, communicate the data to system B using the wire format, and then deserialize the wire-formatted data on system B to bring the data back into an organized in-memory format. This process of serialization, communication, and deserialization can consume both memory and computer cycles merely for formatting data.